package scene;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.List;

import geometrie.Point;
/**
 * Il lit un fichier OFF pour retrouver les facettes
 *
 */
public class ModeleMaillage {
	private static Point[] sommets;
	private static List<Facette3D> facettes;
	private static int numSommets;
	private static int numFacettes;
	private static final int SCALE = 30;
	/**
	 * Il reçoit un nom de fichier pour obtenir les facettes d'une modèle. 
	 * @param nomFichier Le nom du fichier.
	 * @return Une liste d'objets Facette3D.
	 */
	public static List<Facette3D> construitModel(String nomFichier){
		if(!nomFichier.equals(null)){
			File file = null;
			FileReader fr = null;
			BufferedReader br = null;
			try {
				//Ouvrir l'archive
				file= new File (nomFichier);
				fr = new FileReader (file);
				br = new BufferedReader(fr);
				br.readLine();//La premier ligne que di OFF
				String[] tmp= br.readLine().split(" "); //On trouve le nombre de sommets et de facettes.
				numSommets=Integer.parseInt(tmp[0]);
				numFacettes=Integer.parseInt(tmp[1]);
				sommets=new Point[numSommets];//On creer l'ensemble de sommets
				facettes= new ArrayList<Facette3D>();//On creer la liste de facettes
				for(int i=0;i<numSommets;i++){
					String[] aux= br.readLine().split(" ");//On lire chaque ligne
					//On creer le points et pour l'augmenter de taille on utilice une echelle.
					sommets[i]=new Point(SCALE*Double.parseDouble(aux[0]),SCALE*Double.parseDouble(aux[1]),SCALE*Double.parseDouble(aux[2]));
				}
				for(int i=0;i<numFacettes;i++){
					String[] aux= br.readLine().split(" ");
					//On creer les facettes a partir de l'ensemble de points
					facettes.add(new Facette3D(sommets[Integer.parseInt(aux[2])],sommets[Integer.parseInt(aux[3])],sommets[Integer.parseInt(aux[4])]));
				}
			}catch(Exception e){
				e.printStackTrace();
		      }finally{
		         try{                    
		            if( null != fr ){   
		               fr.close();     
		            }                  
		         }catch (Exception e2){ 
		            e2.printStackTrace();
		          }
			  }
		      return facettes;
		}
		return null;
	}
}
